// package com.xuyuan.cloud.nacos;
//
// import com.alibaba.nacos.api.NacosFactory;
// import com.alibaba.nacos.api.exception.NacosException;
// import com.alibaba.nacos.api.naming.NamingService;
// import com.alibaba.nacos.api.naming.listener.Event;
// import com.alibaba.nacos.api.naming.listener.EventListener;
// import com.alibaba.nacos.api.naming.listener.NamingEvent;
// import com.alibaba.nacos.api.naming.pojo.Instance;
//
// import java.util.Properties;
//
//
// /**
//  * 心跳机制的源码实现涉及到客户端和服务端两部分：
//  * 客户端:
//  * 客户端会启动一个定时任务，周期性地向Nacos服务器发送心跳请求。
//  * 心跳请求通常包含服务名称、IP地址、端口等信息，用于标识具体的服务实例。
//  * 服务端:
//  * Nacos服务器接收来自客户端的心跳请求，并更新对应服务实例的状态。
//  * 如果某个实例在规定时间内没有发送心跳，服务器会将其标记为不健康或直接剔除。
//  * 实现细节
//  * 心跳请求:
//  * 心跳请求通常是一个HTTP POST请求，携带必要的参数来标识服务实例。
//  * 健康检查:
//  * Nacos不仅依赖于心跳来判断服务实例的健康状态，还可以结合其他健康检查机制，如HTTP检查、TCP检查等，确保服务实例的真实健康状况。
//  */
// public class NacosServiceRegister {
//
//     private static final String NACOS_SERVER_ADDR = "127.0.0.1:8848";
//     private static final String SERVICE_NAME_1 = "my-service-1";
//     private static final String SERVICE_NAME_2 = "my-service-2";
//     private static final String SERVICE_NAME_3 = "my-service-3";
//     private static final String IP = "127.0.0.1";
//     private static final int PORT1 = 8091;
//     private static final int PORT2 = 8092;
//     private static final int PORT3 = 8093;
//
//     /**
//      * namespace的id
//      */
//     private static final String NAMESPACE = "27f71646-c289-4e7f-88e0-a3701214704e";
//
//     public static void main(String[] args) throws NacosException {
//         // 配置Nacos连接参数
//         Properties properties = new Properties();
//         properties.setProperty("serverAddr", NACOS_SERVER_ADDR);
//         properties.setProperty("namespace", NAMESPACE);
//
//         // 创建 NamingService 实例
//         NamingService namingService = NacosFactory.createNamingService(properties);
//
//         // 创建服务实例
//         Instance instance1 = new Instance();
//         instance1.setIp(IP);
//         instance1.setPort(PORT1);
//         instance1.setServiceName(SERVICE_NAME_1);
//         namingService.registerInstance(SERVICE_NAME_1, instance1);
//
//         Instance instance2 = new Instance();
//         instance2.setIp(IP);
//         instance2.setPort(PORT2);
//         instance2.setServiceName(SERVICE_NAME_2);
//         namingService.registerInstance(SERVICE_NAME_2, instance2);
//
//         Instance instance3 = new Instance();
//         instance3.setIp(IP);
//         instance3.setPort(PORT3);
//         instance3.setServiceName(SERVICE_NAME_3);
//         namingService.registerInstance(SERVICE_NAME_3, instance3);
//
//
//         namingService.registerInstance("my-service-4", "group1", "11.11.11.11", 8888, "DEFAULT");
//         namingService.registerInstance("my-service-5", "group2", "2.2.2.2", 9999, "DEFAULT");
//         namingService.registerInstance("my-service-5", "group2", "2.2.2.2", 9998, "DEFAULT");
//
//
//         namingService.subscribe("my-service-2", new EventListener() {
//             @Override
//             public void onEvent(Event event) {
//                 System.out.println(((NamingEvent) event).getServiceName());
//                 System.out.println(((NamingEvent) event).getInstances());
//             }
//         });
//
//         // 服务下线
//         namingService.deregisterInstance("my-service-2", "127.0.0.1", 8092, "DEFAULT");
//
//         System.out.println(namingService.getAllInstances("my-service-5"));
//     }
// }
